iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0
自我挑戰組

從零開始學習LeetCode系列 第 15

Day 15 Best Time to Buy and Sell Stock with Transaction Fee

  • 分享至 

  • xImage
  •  

(最佳買賣股票時機 – 含手續費版)

題目:你是一位股票投資人,給定一個整數陣列 prices,其中 prices[i] 表示第 i 天的股價,並且有一個整數 fee 表示 每次交易(買+賣)需要支付的手續費。

  • 你可以多次買入和賣出股票,但每次交易都會扣掉手續費,請問最大獲利是多少?
  • https://ithelp.ithome.com.tw/upload/images/20250929/20169339TALbuyxgze.jpg

解法一
https://ithelp.ithome.com.tw/upload/images/20250929/20169339UQta2YkOKS.jpg

  • 動態規劃(DP 狀態機)

註解

  • hold:第 i 天結束後,手上 持有股票 的最大獲利
  • not_hold:第 i 天結束後,手上 沒有股票 的最大獲利

狀態轉移:
1. 持股狀態

  • 昨天就持股 → 今天繼續持有
  • 昨天沒持股 → 今天買入股票
    hold = max(hold, not_hold - prices[i])
  1. 不持股狀態
  • 昨天就沒持股 → 今天繼續不持有
  • 昨天持股 → 今天賣出(要扣手續費)
    not_hold = max(not_hold, hold + prices[i] - fee)

總結

  • 這題的核心跟 Day 13 幾乎一樣,只是「賣出」時要多扣掉一個 fee
  • 狀態數仍然只有 hold / not_hold 兩種,比 Day 14 簡單
  • 這題是面試經典,因為它考察「在既有狀態機模型下,如何修改公式處理額外條件」

上一篇
Day 14 Best Time to Buy and Sell Stock with Cooldown
系列文
從零開始學習LeetCode15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言